package com.southwind.springboottest.study.java中流式操作;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.IntFunction;

/**
 * @description：TODO
 * @author： HXG
 * @create： 2024/3/20 14:32
 */
public class StreamDemo9 {
    public static void main(String[] args) {
        /**
         * Void forEach(Consumer action) 遍历
         * long count()                 统计
         * toArray()                    收集流中的数据，放到数组中
         */
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");

        //Void forEach(Consumer action) 遍历

        //Consumer的泛型：表示流中的数据类型
        //accept方法的形参：依次标识流里面的每一个数据
        //方法体：对每一个数据的处理操作
//        list.stream().forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
//        list.stream().forEach(s -> System.out.println(s));

        //long count()                 统计
//        long count = list.stream().count();
//        System.out.println(count);

        //toArray()                    收集流中的数据，放到数组中
//        Object[] array = list.stream().toArray();
//        System.out.println(Arrays.toString(array));

        //IntFunction的泛型：具体类型的数组
        //apply的形参：流中的数据个数，要根数组长度保持一致
        //apply的返回值：具体类型的数组
        //方法体就是创建数组

        //toArray方法的参数作用：负责创建一个制定类型的数组
        //toArray方法的底层，会依次得到流里面的每一个数据，并把数据放到数组中
        //toArray的返回值：是一个装着流里面所有数据的数组
//        String[] array = list.stream().toArray(new IntFunction<String[]>() {
//            @Override
//            public String[] apply(int value) {
//                return new String[value];
//            }
//        });
//        System.out.println(Arrays.toString(array));
        String[] array = list.stream().toArray(value -> new String[value]);
        System.out.println(Arrays.toString(array));

    }
}
